import axios from 'axios'
import {getFromLocalStroge} from './common.js'
import store from '../store/index.js'
import {basic64Encode} from './common.js'

// 环境的切换
if (process.env.NODE_ENV == 'development') { 
  axios.defaults.baseURL = ''
} else if (process.env.NODE_ENV == 'debug') { 
  axios.defaults.baseURL = ''
} else if (process.env.NODE_ENV == 'production') { 
  axios.defaults.baseURL = '' //http://192.168.47.106:5000 http://120.79.186.23:81
}
axios.defaults.timeout = 10000
axios.defaults.withCredentials=false
axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8'


// 请求拦截器
axios.interceptors.request.use(    
  config => {
    // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    const token = store.getters.token
    
    try{
      token && (config.headers.Authorization = 'Basic ' + basic64Encode(token+':'))
    }catch(e){
      config.headers.Authorization = ''
    }
    console.log('Authorization=' + config.headers.Authorization)
    return config
  },    
  error => {
    // TEST
    console.log('请求参数错误' + error)
    return Promise.error(error)
  }
)
 
// 响应拦截器
axios.interceptors.response.use(
  res=>{
    console.log('返回响应状态: '+ res.status)
    //const test = JSON.stringify(res)
    //console.log('响应结果: '+ test)
    if(res.status === 200){
      return Promise.resolve(res.data)
    }
  },
  err=>{
    if(err == "Error: timeout of 10000ms exceeded"){
      console.log("服务器请求超时")
    }
    console.log('错误: '+ err)
    ////处理正常请求返回的异常
    if(err && err.response){
      //switch case
      const status = err.response.status
      const error_code = err.response.data.error_code
      const msg = err.response.data.msg
      switch(status){
        case 400:
          error_code && console.log(error_code)
          console.log('参数错误 401')
          break
        case 401:
          error_code && console.log(error_code)
          console.log('未授权 401')
          break
        case 403:
          error_code && console.log(error_code)
          console.log('禁止访问 403')
          break
        case 404:
          error_code && console.log(error_code)
          console.log('没有找到资源或页面 404')
          break
        case 500:
          error_code && console.log(error_code)
          console.log('服务器关闭了 500')
          break
        default:
          console.log('未知异常?')
          break
      }
    }
    return Promise.reject(err)
  }
)

/** 
 * get方法，对应get请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
export function get(url, params=null){    
  return new Promise((resolve, reject) =>{        
    axios.get(url, {            
        params: params   
    })        
    .then(
      res => {
        resolve(res)
      },
      err => {
        reject(err)
      }
    )
    .catch(error => {        
        console.log('错误： '+error) 
    })
  });
}

/** 
 * post方法，对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
export function post(url, params) {
    console.log(params)
    return new Promise((resolve, reject) => {
        axios.post(url, params)        
        .then(
          res=>{
            console.log('1111111')
            resolve(res)
          },
          err=>{
            console.log('22222')
            reject(err)
          }
        )
        .catch(error=> {    
            console.log('错误： '+error) 
        })
    });
}

/** 
 * delete方法，对应delete请求 
 * @param {String} url [请求的url地址] 
 */
 export function _delete(url) {
 		return new Promise((resolve, reject) =>{
 			axios.delete(url)
 			.then(
        res=>{
          resolve(res)
        },
        err=>{
          reject(err)
        }
      )
      .catch(error=> {    
          console.log('错误： '+error) 
      })
 		})
 }